package wh.coach._collection;

import java.util.HashMap;
import java.util.Map;

import com.google.common.collect.Maps;

/**
 * @author hangwen
 * @date 2023/6/25
 */
public class _HashMap {

    public static void main(String[] args) {
        //Map是接口，着重的是KV特性
        //HashMap是基于哈希表实现的Map，数组+链表|红黑树
        //Key-> int hashCode -> 决定Value在数组的位置
        //如果存在hash冲突（不同的key，hashCode相同），则追到到链表|红黑树

        //问题：问什么hashCode和equals方法要同时实现？如果实现逻辑冲突会导致什么问题？
        //1.如果equals返回true,hashCode两者必须相等
        //2.如果hashCode不相等，那么equals必须返回false

        //同样的数据量，HashMap内存要大于ArrayList很多，所以要结合场景选取合适的集合
        //与ArrayList一样，HashMap内部有数组，所以有扩容现象，因此尽量在使用时可以确定
        Maps.newHashMapWithExpectedSize(100);

        Map<String, Object> map = new HashMap<>();

        map.get("1");
        map.put("1", "abc");
        map.remove("1");
        map.containsKey("1");

        map.putAll(null);
        map.putIfAbsent(null, null);
        map.computeIfAbsent(null, null);
        map.computeIfPresent(null, null);
        map.compute(null, null);
        map.entrySet();

    }

}
